cleofandomcom_ru-20200214-history
Работа с файлами
Введение Всем известно, что такое файлы, где и как они используются. В CLEO также возможна работа с файлами, чем мы и займемся. Опкоды для работы с файлами CLEO отведено мало, но их будет достаточно. Доступные режимы работы Для начала начнем с режимов чтения/записи файлов. Используются они при открытии файлов, чтобы указать тот или иной режим работы с файлом... Открытие файла Для того, чтобы работать с файлом, необходимо сначала открыть его. Для этого используем опкод opcodes:0a9a: if 0A9A: 0@ = openfile "MyFile.txt" mode "r" then // действия с файлом 0A9B: closefile 0@ // Закрываем файл, т.к. он нам больше не нужен end Выделить кодCLEOВ 0@ возвращается указатель на открытый файл(для дальнейшей работы). Всегда проверяйте, что он действителен(больше 0; в примере это уже предусмотрено), иначе во время открытия может произойти ошибка, а Вы об этом даже не узнаете и при попытке прочитать/записать в файл произойдет исключение; "MyFile.txt" - путь к файлу; "r" - режим После получения дескриптора на открытый файл, мы можем прочитать его или записать что-то. Чтение файла Сюда же можно ещё применить опкод opcodes:0ada, который сканирует файл по указанному формату. Для того, чтобы прочитать файл, необходим буфер(можно обойтись и одной строковой переменной @v или @s, но думаю нам этого не хватит). Также, чтобы прочитать несколько строк из файла, необходимо проверять, достиг ли указатель чтения конца файла или нет. Это проверяется опкодом: opcodes:0ad6. В целом все это выглядит так: 0AC8: 1@ = allocate_memory_size 96 // Выделяем буфер 0AC8: 2@ = allocate_memory_size 4096 // Произвольный буфер(исп. для вывода всех строк из файла) 0C11: memset destination 1@ value 0 size 96 // safe 0C11: memset destination 2@ value 0 size 4096 // ... repeat if 0AD7: read_string_from_file 0@ to 1@ size 95 // Копируем строку из файла в буфер + проверяем, прошло ли чтение удачно then 0C26: strupr in 1@ out 1@ // Переводим полученный текст в верхний регистр 0C15: strcat destination 2@ source 1@ // Присоединяем строку ко второму буферу 0C11: memset destination 1@ value 0 size 96 // Очищаем буфер, чтобы при следующем чтении не попало какой-то лишней информации end until 0AD6: end_of_file 0@ reached // Проверяем, не достигло ли конца файла 0B3B: samp show_dialog id 10 caption "Чтение файла" text 2@ button_1 "Закрыть" button_2 "" style 0 0AC9: free_allocated_memory 1@ // Удаляем участок выделенной памяти под буфер(т.к. он нам больше не нужен) 0AC9: free_allocated_memory 2@ // ... Выделить кодCLEOЗапись в файл Сюда же мы отнесем и добавление в файл(это почти идентично). Для записи строк в файл можно применить 3 опкода: *0A9E - используется для записи в бинарном виде *0AD8 - используется для записи в "обычном" виде *0AD9 - используется для форматированной записи Бинарный вид пропустим(т.к. я не разбирался что к чему). Два других опкода я разберу в одном примере: 0AC8: 1@ = allocate_memory_size 96 // Выделяем буфер 0AD3: 1@ = format "PiwPiw332%c" 0xA // 0xA - переход на новую строку 0AD8: write_string_to_file 0@ from 1@ // В файл(в текущий указатель записи) запишется текст из буфера // и указатель записи переместится на новую строку(исходя из содержания буфера) 0AC9: free_allocated_memory 1@ // Удаляем участок выделенной памяти под буфер(т.к. он нам больше не нужен) 2@ = 28 3@ = 1 4@ = 2015 0AD9: write_formatted_text "Now: %d.%d.%d%c" in_file 0@ params 2@ 3@ 4@ 0xA // В файл запишется форматированная строка, которая не требует бу Источники https://blast.hk/threads/17446/